home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 2
/
Deutsche Edition 2.iso
/
mac
/
POWERMAC
/
C64
/
SOURCE
/
Instructions68K.h
< prev
next >
Wrap
Text File
|
1994-06-06
|
6KB
|
302 lines
#define PC(x) \
ADDQ.W x,rPC
#define NegSet(z) \
BTST #7,z \
BEQ @99 \
BSET #bNEG,rFLAGS \
@99
#define FlagsNZ(z) \
MOVE.B z,D0 \
BSR doFlagsNZ
#define ORA(x) \
x(D1) \
ByteAt(D1,D1) \
OR.B D1,rA \
FlagsNZ(rA)
#define ASL(x) \
x(D1) \
ByteAt(D1,D0) \
ANDI.B #0xff-(CAR|NEG|ZER),rFLAGS \
BTST #7,D0 \
BEQ @3 \
BSET #bCAR,rFLAGS \
@3 LSL.B #1,D0 \
MOVE.B D0,(rRAM,D1.L) \
NegSet(D0) \
TST.B D0 \
BNE @4 \
BSET #bZER,rFLAGS \
@4
#define LSR(x) \
x(D1) \
ByteAt(D1,D0) \
ANDI.B #0xff-(CAR|NEG|ZER),rFLAGS \
BTST #0,D0 \
BEQ @3 \
BSET #bCAR,rFLAGS \
@3 LSR.B #1,D0 \
BNE @4 \
BSET #bZER,rFLAGS \
@4 MOVE.B D0,(rRAM,D1.L)
#define BCL(x) \
BTST x,rFLAGS \
BEQ @3 \
ADDQ.W #1,rPC \
RTS \
@3 ImmediateByte(D1) \
ADDQ.W #1,rPC \
BTST #7,D1 \
BNE @4 \
ADD.W D1,rPC \
RTS \
@4 EORI.W #0xFF,D1 \
ADD.W #1,D1 \
SUB.W D1,rPC
#define BST(x) \
BTST x,rFLAGS \
BNE @3 \
ADDQ.W #1,rPC \
RTS \
@3 ImmediateByte(D1) \
ADDQ.W #1,rPC \
BTST #7,D1 \
BNE @4 \
ADD.W D1,rPC \
RTS \
@4 EORI.W #0xFF,D1 \
ADD.W #1,D1 \
SUB.W D1,rPC
#define CLR(x) \
BCLR x,rFLAGS
/*flags &=~x; return*/
#define SET(x) \
BSET x,rFLAGS
/*flags |= x; return*/
#define AND(x) \
x(D1) \
ByteAt(D1,D0) \
AND.B D0,rA \
FlagsNZ(rA)
/*a &= ByteAt(x()); FlagsNZ(a)*/
#define BIT(x) \
x(D1) \
ByteAt(D1,D1) \
ANDI.B #0xFF-(ZER|NEG|OVF),rFLAGS \
MOVE.B rA,D0 \
AND.B D1,D0 \
BNE @3 \
BSET #bZER,rFLAGS \
@3 ANDI.B #(NEG|OVF),D1 \
OR.B D1,rFLAGS
#define ROL(x) \
x(D1) \
ByteAt(D1,D0) \
BTST #bCAR,rFLAGS \
BEQ @3 \
BTST #7,D0 \
BNE @4 \
BCLR #bCAR,rFLAGS \
@4 LSL.B #1,D0 \
OR.B #1,D0 \
BRA @5 \
@3 BTST #7,D0 \
BEQ @6 \
BSET #bCAR,rFLAGS \
@6 LSL.B #1,D0 \
@5 MOVE.B D0,(rRAM,D1.L) \
FlagsNZ(D0)
#define ROR(x) \
x(D1) \
ByteAt(D1,D0) \
BTST #bCAR,rFLAGS \
BEQ @3 \
BTST #0,D0 \
BNE @4 \
BCLR #bCAR,rFLAGS \
@4 LSR.B #1,D0 \
OR.B #0x80,D0 \
BRA @5 \
@3 BTST #0,D0 \
BEQ @6 \
BSET #bCAR,rFLAGS \
@6 LSR.B #1,D0 \
@5 MOVE.B D0,(rRAM,D1.L) \
FlagsNZ(D0)
#define EOR(x) \
x(D1) \
ByteAt(D1,D1) \
EOR.B D1,rA \
FlagsNZ(rA)
/*a^=ByteAt(x());FlagsNZ(a)*/
#define STA(y) \
y(D1) \
MOVE.B rA,(rRAM,D1.L)
/*RAM[x()]=a*/
#define STY(x) \
x(D1) \
MOVE.B rY,(rRAM,D1.L)
/*RAM[x()]=y*/
#define STX(y) \
y(D1) \
MOVE.B rX,(rRAM,D1.L)
/*RAM[y()]=x*/
#define LDA(x) \
x(D1) \
ByteAt(D1,rA) \
FlagsNZ(rA)
/*a=ByteAt(x()); FlagsNZ(a)*/
#define LDY(x) \
x(D1) \
ByteAt(D1,rY) \
FlagsNZ(rY)
/*y=ByteAt(x()); FlagsNZ(y)*/
#define LDX(y) \
y(D1) \
ByteAt(D1,rX) \
FlagsNZ(rX)
/*x=ByteAt(y()); FlagsNZ(x)*/
#define BCD2DEC(x) \
LEA bcd2dec,A2 \
MOVE.B (A2,x.W),x \
ANDI.W #0x00FF,x
/*((x&15)+((x&240)>>4)*10)*/
#define DEC2BCD(x,y) \
LEA dec2bcd,A2 \
MOVE.B (A2,x.W),y \
ANDI.W #0x00FF,y
/*{ y=x/10; x -=y*10; y=(y<<4) +x;}*/
#define ADC(x) \
x(D1) \
ByteAt(D1,D1) \
ANDI.W #0x00FF,D1 \
BTST #bDEC,rFLAGS \
BNE @3 \
ANDI.W #0x00FF,rA \
ADD.W D1,rA \
BTST #bCAR,rFLAGS \
BEQ @7 \
ADDQ.W #1,rA \
@7 ANDI.B #0xFF-(CAR|OVF|NEG|ZER),rFLAGS \
CMPI.W #0x00FF,rA \
BLE @8 \
OR.B #(OVF|CAR),rFLAGS \
@8 FlagsNZ(rA) \
BRA @6 \
@3 BCD2DEC(D1) \
BCD2DEC(rA) \
ADD.W D1,rA \
BTST #bCAR,rFLAGS \
BEQ @4 \
ADDQ.W #1,rA \
@4 ANDI.B #0xFF-(CAR|OVF|NEG|ZER),rFLAGS \
CMPI.W #99,rA \
BLE @5 \
OR.B #(CAR|OVF),rFLAGS \
SUBI.W #100,rA \
@5 FlagsNZ(rA) \
DEC2BCD(rA,rA) \
@6
#define SBC(x) \
x(D1) \
ByteAt(D1,D1) \
ANDI.W #0x00FF,D1 \
BTST #bDEC,rFLAGS \
BNE @3 \
ANDI.W #0x00FF,rA \
SUB.W D1,rA \
BTST #bCAR,rFLAGS \
BNE @7 \
SUB.W #1,rA \
@7 ANDI.B #0xFF-(CAR|OVF|NEG|ZER),rFLAGS \
TST.W rA \
BNE @8 \
OR.B #(ZER|CAR),rFLAGS \
BRA @9 \
@8 BMI @10 \
BSET #bCAR,rFLAGS \
BRA @9 \
@10 BSET #bOVF,rFLAGS \
@9 NegSet(rA) \
BRA @6 \
@3 BCD2DEC(D1) \
BCD2DEC(rA) \
SUB.W D1,rA \
BTST #bCAR,rFLAGS \
BNE @4 \
SUB.W #1,rA \
@4 ANDI.B #0xFF-(CAR|OVF|NEG|ZER),rFLAGS \
TST.W rA \
BNE @5 \
OR.B #(ZER|CAR),rFLAGS \
BRA @11 \
@5 BMI @12 \
BSET #bCAR,rFLAGS \
BRA @11 \
@12 BSET #bNEG,rFLAGS \
ADDI.W #100,rA \
@11 DEC2BCD(rA,rA) \
@6
#define DECR(x) \
x(D1) \
ByteAt(D1,D0) \
SUBQ.B #1,D0 \
MOVE.B D0,(rRAM,D1.L) \
FlagsNZ(D0)
#define INCR(x) \
x(D1) \
ByteAt(D1,D0) \
ADDQ.B #1,D0 \
MOVE.B D0,(rRAM,D1.L) \
FlagsNZ(D0)
#define CPY(mode) CP(mode,rY)
#define CPX(mode) CP(mode,rX)
#define CMP(mode) CP(mode,rA)
#define CP(mode,reg) \
mode(D1) \
ByteAt(D1,D1) \
DOCP(reg)
#define CPI(reg) \
ImmediateByte(D1) \
DOCP(reg)
#define DOCP(reg) \
ANDI.B #0xFF-(CAR|ZER|NEG),rFLAGS \
CMP.B reg,D1 \
BNE @3 \
ORI.B #(CAR|ZER),rFLAGS \
BRA @4 \
@3: BCC @5 \
BSET #bCAR,rFLAGS \
BRA @4 \
@5: BSET #bNEG,rFLAGS \
@4